using Domain.Dto;
using Gmmy.Utility;
using Surging.Core.CPlatform.Filters.Implementation;
using Surging.Core.CPlatform.Ioc;
using Surging.Core.CPlatform.Runtime.Server.Implementation.ServiceDiscovery.Attributes;
using System.Threading.Tasks;
using Gmmy.DomainExtension;
using Surging.Core.CPlatform.Support;
using Surging.Core.CPlatform.Support.Attributes;

namespace Application.Interface
{
	[ServiceBundle("api/{Service}")]
    public interface IModuleService : IServiceKey
    {	
	    /// <summary>
        /// 获取功能模块
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [Authorization(AuthType = AuthorizationType.JWT)]
        Task<CustomApiResult> Get(GetInput input);

        /// <summary>
        /// 获取功能模块列表
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [Authorization(AuthType = AuthorizationType.JWT)]
        Task<CustomApiResult> GetList(ModuleListInput input);

        /// <summary>
        /// 创建功能模块
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [Authorization(AuthType = AuthorizationType.JWT)]
        Task<CustomApiResult> Create(ModuleCreateInput input);


        /// <summary>
        /// 更新功能模块信息
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [Authorization(AuthType = AuthorizationType.JWT)]
        Task<CustomApiResult> Update(ModuleUpdateInput input);
        
        /// <summary>
        /// 删除功能模块信息
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [Authorization(AuthType = AuthorizationType.JWT)]
        Task<CustomApiResult> LogicDelete(LogicDeleteInput input);

        /// <summary>
        /// 获取所有模块用于角色分配
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [Authorization(AuthType = AuthorizationType.JWT)]
        Task<CustomApiResult> GetModuleAll(EmptyRequest input);


        /// <summary>
        /// 获取所有模块地址
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [Authorization(AuthType = AuthorizationType.JWT)]
        Task<CustomApiResult> GetModuleAddressAll(EmptyRequest input);
    }
}